package com.xbongbong.paas.model;

import com.xbongbong.paas.domain.entity.PaasCommentEntity;
import com.xbongbong.paas.domain.entity.ext.PaasCommentEntityExt;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @author: wufeng
 * @date: 2018/8/29 10:04
 * @desrcption:
 */
public interface PaasCommentModel {

    /**
     * 插入实体
     * @param entity
     * @return
     */
    Integer insert(PaasCommentEntity entity);

    /**
     * 评论列表
     * @param map
     * @return
     */
    List<PaasCommentEntityExt> list(Map<String, Object> map);

    List<PaasCommentEntityExt> findEntitys(Map<String, Object> map);

    List<PaasCommentEntityExt> insertBatch(List<PaasCommentEntityExt> entityList);

    /**
     * 计数
     * @param map
     * @return
     */
    Integer getEntitysCount(Map<String,Object> map);

    PaasCommentEntity getByKey(Long key, String corpid);

    /**
     * 评论总数map
     * 从PaasCommentService内移入
     * @param dataIdIn 业务ids
     * @param corpid 公司id
     * @param code 评论类型 @see BusinessCommentEnum
     * @return java.util.Map<java.lang.Long,java.lang.Integer>
     * @author zcp
     * @date 2019/5/12 16:44
     * @since v1.0
     * @version v1.0
     */
    Map<Long, Integer> getCommnetCountMap(Collection<Long> dataIdIn, String corpid, Integer code);

    /**
     * 有我评论的需求
     * 从PaasCommentService内移入
     * @param dataIdIn 业务ids
     * @param corpid 公司id
     * @param code 评论类型 @see BusinessCommentEnum
     * @param userId 员工userId
     * @return java.util.List<java.lang.Long>
     * @author zcp
     * @date 2019/5/12 16:59
     * @since v1.0
     * @version v1.0
     */
    List<Long> hasMyComment(Collection<Long> dataIdIn, String corpid, Integer code, String userId);

    /**
     * 批量更新评论中某公司某评论者的姓名和头像
     * @param corpid
     * @param userId
     * @param userName
     */
    Integer dataConsistencyUpdateUser(String corpid, String userId, String userName, String userAvatar);
    /**
     * 批量更新评论中某公司某被评论者的姓名
     * @param corpid
     * @param userId
     * @param userName
     */
    Integer dataConsistencyUpdateRefUser(String corpid, String userId, String userName);

    /**
     * 删除实体
     * @param id
     * @return
     */
    Integer deleteByKey(Long id, String corpid);

    /**
     * 删除实体
     * @param refId
     * @return
     */
    Integer deleteByRefId(Long refId, String corpid, Long appId, Integer type);

    /**
     * 根据key修改content、image、attachment
     * 删除实体
     * @param entity
     * @return
     */
    public Integer updateContentByKey(PaasCommentEntity entity);

    /**
     * 批量获取评论下的回复数量
     * @param corpid 公司id
     * @param replyType 参考BusinessCommentEnum.COMMENT_REPLY
     * @param commentIdList 评论id列表
     * @return
     */
    Map<Long,Integer> batchGetReplyCount(String corpid, Integer replyType, List<Long> commentIdList);

    /**
     * 删除指定评论下的所有的回复信息
     * 根据评论id和corpid删除评论， 根据评论id、公司id、评论类型为回复类型的删除回复数据
     * @param commentId 评论id
     * @param corpid 公司id
     * @param replyType 参考BusinessCommentEnum.COMMENT_REPLY
     */
    void deleteCommentWithReply(Long commentId, String corpid,Integer replyType,Long appId);

}
